package com.zyl.basis.lambda;

/**
 * @author zhaoyl
 * @date 2024/5/27 15:18
 * @description 说明
 * ambda表达式
 * 为什么要使用Lambda表达式
 * 避免匿名内部类定义过多
 * 代码看起来简洁
 * 去掉了无意义代码，只留下核心的逻辑
 */
public class LambdaTest {
    // 3.静态内部类
    static class Like2 implements IntLike {
        @Override
        public void lambda(int a) {
            System.out.println("Lambda表达式"+a);
        }
    }

    public static void main(String[] args) {

        IntLike like = new Like();
        like.lambda(1); //1,2操作后

        like = new Like2();
        like.lambda(2); // 3 操作后


        // 4.局部内部类
        class Like3 implements IntLike {
            @Override
            public void lambda(int a ) {
                System.out.println("Lambda表达式"+a);
            }
        }

        like = new Like3();
        like.lambda(3); // 4 操作后

        // 5.匿名内部类，没有类的名称，必须借助接口或者父类
        // 直接实现接口，没有类名
        like = new IntLike() {
            @Override
            public void lambda(int a) {
                System.out.println("Lambda表达式"+a);
            }
        };
        like.lambda(4);

        //6.用lambda简化
        like = (int a) -> System.out.println("Lambda表达式"+a);
        like.lambda(5);

        // 简化，去掉参数类型和括号
        like = a -> System.out.println("Lambda表达式"+a);
        like.lambda(6);


//
//        // lambda表达式，实例化函数式接口，直接实现接口中的方法
//        IntLike like = () -> System.out.println("Lambda表达式5");
//        like.lambda()
//
//
        new Thread(()-> System.out.println("test")).start();
    }
}

// 1.定义一个函数式接口
interface IntLike {
    void lambda(int a);

}

// 2.实现接口
class Like implements IntLike {

    @Override
    public void lambda(int a) {
        System.out.println("Lambda表达式"+a);
    }
}
